package toOffer;

/**
 * <h3>toOffer</h3>
 *
 * @author YuanAo
 * @date 2024/6/12 16:36
 * @description <p>2的幂</p>
 */

import java.util.Objects;

/**
 * 给你一个整数 n，请你判断该整数是否是 2 的幂次方。如果是，返回 true ；否则，返回 false 。
 *
 * 如果存在一个整数 x 使得 n == 2x ，则认为 n 是 2 的幂次方。
 */
public class No231 {
    public static void main(String[] args) {
        int n = 16;
        System.out.println(isPowerOfTwo(n));
    }

    /**
     * 思路：
     * 十进制转二进制，所有2的幂的数 在二进制上的表现形式都是1开头、后续接0个或者多个“0”
     * @param n
     * @return
     */
    public static boolean isPowerOfTwo(int n) {
        if (n < 0){
            return false;
        }
        
        String str = Integer.toBinaryString(n);
        char[] chars = str.substring(1).toCharArray();
        boolean flag = true;
        for (char c : chars) {
            if (c == '1') {
                flag = false;
                break;
            }
        }

        if (Objects.equals(str.substring(0, 1), "1") && flag){
            return true;
        }

        return false;
    }
}
